home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 February: Technology Seed / Mac Tech Seed Feb '97.toast / ODF Release 3 / ODFDev / ODF / Found / FWRefCnt / FWSOMPtr.tpp < prev    next >
Encoding:
Text File  |  1996-12-16  |  5.8 KB  |  215 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWSOMPtr.tpp
  4. //    Release Version:    $ ODF 3 $
  5. //
  6. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #ifndef FWSOMPTR_H
  11. #include "FWSOMPtr.h"
  12. #endif
  13.  
  14. #ifndef FWSOMENV_H
  15. #include "FWSOMEnv.h"
  16. #endif
  17.  
  18.  
  19. //----------------------------------------------------------------------------------------
  20. //    FW_TSOMPtr<TRep>::FW_TSOMPtr
  21. //----------------------------------------------------------------------------------------
  22.  
  23. template<class TRep>
  24. FW_TSOMPtr<TRep>::FW_TSOMPtr() :
  25.     fRep(NULL)
  26. {
  27.     FW_END_CONSTRUCTOR
  28. }
  29.  
  30. //----------------------------------------------------------------------------------------
  31. //    FW_TSOMPtr<TRep>::~FW_TSOMPtr
  32. //----------------------------------------------------------------------------------------
  33.  
  34. template<class TRep>
  35. FW_TSOMPtr<TRep>::~FW_TSOMPtr()
  36. {
  37.     FW_START_DESTRUCTOR
  38.     delete fRep;
  39. }
  40.  
  41. //----------------------------------------------------------------------------------------
  42. //    FW_TSOMPtr<TRep>::FW_TSOMPtr
  43. //----------------------------------------------------------------------------------------
  44.  
  45. template<class TRep>
  46. FW_TSOMPtr<TRep>::FW_TSOMPtr(Environment *ev, TRep* rep) :
  47.     fRep(NULL)
  48. {
  49.     SetRep(ev, rep);
  50.     FW_END_CONSTRUCTOR
  51. }
  52.  
  53. //----------------------------------------------------------------------------------------
  54. //    FW_TSOMPtr<TRep>::SetRep
  55. //----------------------------------------------------------------------------------------
  56.  
  57. template<class TRep>
  58. void FW_TSOMPtr<TRep>::SetRep(Environment *, TRep* rep)
  59. {
  60.     if (fRep != rep)
  61.     {
  62.         delete fRep;
  63.         fRep = rep;
  64.     }
  65. }
  66.  
  67. //----------------------------------------------------------------------------------------
  68. //    FW_TSOMPtr<TRep>::FW_TSOMPtr(const FW_TSOMPtr<TRep>& other)
  69. //----------------------------------------------------------------------------------------
  70.  
  71. template<class TRep>
  72. FW_TSOMPtr<TRep>::FW_TSOMPtr(const FW_TSOMPtr<TRep>&)
  73. {
  74.     // MetroWerks won't compile if this isn't defined
  75.     FW_PRIV_ASSERT(false);
  76. }
  77.  
  78. //----------------------------------------------------------------------------------------
  79. //    FW_TSOMPtr<TRep>::operator=(const FW_TSOMPtr<TRep>& other)
  80. //----------------------------------------------------------------------------------------
  81.  
  82. template<class TRep>
  83. void FW_TSOMPtr<TRep>::operator=(const FW_TSOMPtr<TRep>&)
  84. {
  85.     // MetroWerks won't compile if this isn't defined
  86.     FW_PRIV_ASSERT(false);
  87. }
  88.  
  89. //----------------------------------------------------------------------------------------
  90. //    FW_TCountedSOMPtr<TRep>::FW_TCountedSOMPtr
  91. //----------------------------------------------------------------------------------------
  92.  
  93. template<class TRep>
  94. FW_TCountedSOMPtr<TRep>::FW_TCountedSOMPtr() :
  95.     fRep(NULL)
  96. {
  97.     FW_END_CONSTRUCTOR
  98. }
  99.  
  100. //----------------------------------------------------------------------------------------
  101. //    FW_TCountedSOMPtr<TRep>::~FW_TCountedSOMPtr
  102. //----------------------------------------------------------------------------------------
  103.  
  104. template<class TRep>
  105. FW_TCountedSOMPtr<TRep>::~FW_TCountedSOMPtr()
  106. {
  107.     FW_START_DESTRUCTOR
  108.     if (fRep != NULL)
  109.     {
  110.         FW_SOMEnvironment ev;
  111.  
  112.         if (fRep->Release(ev) == 0)
  113.             delete fRep;
  114.     }
  115. }
  116.  
  117. //----------------------------------------------------------------------------------------
  118. //    FW_TCountedSOMPtr<TRep>::FW_TCountedSOMPtr
  119. //----------------------------------------------------------------------------------------
  120.  
  121. template<class TRep>
  122. FW_TCountedSOMPtr<TRep>::FW_TCountedSOMPtr(const FW_TCountedSOMPtr<TRep>& other) :
  123.     fRep(other.fRep)
  124. {
  125.     if (fRep != NULL)
  126.     {
  127.         FW_SOMEnvironment ev;
  128.  
  129.         fRep->Acquire(ev);
  130.     }
  131.  
  132.     FW_END_CONSTRUCTOR
  133. }
  134.  
  135. //----------------------------------------------------------------------------------------
  136. //    FW_TCountedSOMPtr<TRep>::FW_TCountedSOMPtr
  137. //----------------------------------------------------------------------------------------
  138.  
  139. template<class TRep>
  140. FW_TCountedSOMPtr<TRep>::FW_TCountedSOMPtr(Environment *ev, const FW_TCountedSOMPtr<TRep>& other) :
  141.     fRep(other.fRep)
  142. {
  143.     if (fRep != NULL)
  144.         fRep->Acquire(ev);
  145.  
  146.     FW_END_CONSTRUCTOR
  147. }
  148.  
  149. //----------------------------------------------------------------------------------------
  150. //    FW_TCountedSOMPtr<TRep>::FW_TCountedSOMPtr
  151. //----------------------------------------------------------------------------------------
  152.  
  153. template<class TRep>
  154. FW_TCountedSOMPtr<TRep>::FW_TCountedSOMPtr(Environment *ev, TRep* rep) :
  155.     fRep(rep)
  156. {
  157.     if (fRep != NULL)
  158.         fRep->Acquire(ev);
  159.  
  160.     FW_END_CONSTRUCTOR
  161. }
  162.  
  163. //----------------------------------------------------------------------------------------
  164. //    FW_TCountedSOMPtr<TRep>::operator=
  165. //----------------------------------------------------------------------------------------
  166.  
  167. template<class TRep>
  168. void FW_TCountedSOMPtr<TRep>::operator=(TRep* rep)
  169. {
  170.     FW_SOMEnvironment ev;
  171.     SetRep(ev, rep);
  172. }
  173.  
  174. //----------------------------------------------------------------------------------------
  175. //    FW_TCountedSOMPtr<TRep>::SetRep
  176. //----------------------------------------------------------------------------------------
  177.  
  178. template<class TRep>
  179. void FW_TCountedSOMPtr<TRep>::SetRep(Environment *ev, TRep* rep)
  180. {
  181.     if (fRep != rep)
  182.     {
  183.         if (fRep != NULL && fRep->Release(ev) == 0)
  184.             delete fRep;
  185.  
  186.         fRep = rep;
  187.         
  188.         if (fRep != NULL)
  189.             fRep->Acquire(ev);
  190.     }
  191. }
  192.  
  193. //----------------------------------------------------------------------------------------
  194. //    FW_TCountedSOMPtr<TRep>::operator new
  195. //----------------------------------------------------------------------------------------
  196.  
  197. // [JEL]
  198. // This method is private, and I'd prefer to leave it undefined, but CodeWarrior seems
  199. // to complain when instantiating templates with undefined methods, even if the methods
  200. // aren't used.
  201.  
  202. #ifndef __MRC__
  203. #if __MWERKS__ < 0x0800
  204.  
  205. template<class TRep>
  206. void* FW_TCountedSOMPtr<TRep>::operator new(size_t size)
  207. {
  208.     FW_PRIV_ASSERT(false);
  209.     return 0;
  210. }
  211.  
  212. #endif 
  213. #endif 
  214.  
  215.